import com.vshining.grame.GrailsControllerResource
import com.vshining.grame.Role
import com.vshining.grame.SystemRoleName
import com.vshining.grame.SystemUserName
import com.vshining.grame.User

class BootStrap {
    def shiroSecurityService;

    def init = { servletContext ->

        /* 系统默认角色 */
        Role.withTransaction {
            // 系统（系统自身）角色，系统角色无需创建
            // 任何人（所有用户拥有该角色）角色
            new Role(name: SystemRoleName.Anyone.name())
                    .addToPermissions(new GrailsControllerResource('auth', null).toPermission())
                    .save();
            // 系统管理员（系统运维）角色
            new Role(name: SystemRoleName.SystemManager.name())
                    .addToPermissions("*")
                    .save()
            // 管理员（业务）角色
            new Role(name: SystemRoleName.Administrator.name())
                    .save()
            // 用户（业务）角色
            new Role(name: SystemRoleName.User.name())
                    .save()
        }

        User.withTransaction {
            /* 系统默认用户 */

            // 系统用户（代表系统自身），系统用户无需创建
            // 匿名用户（代表未登录系统的用户）
            new User(username: SystemUserName.Anonymous.name(), passwordHash: shiroSecurityService.encodePassword(SystemUserName.Anonymous.password))
                    .save()
            // 系统管理员（系统运维人员）
            new User(username: 'admin', passwordHash: shiroSecurityService.encodePassword('admin'))
                    .addToRoles(Role.findByName(SystemRoleName.SystemManager.name()))
                    .save()
        }
    }
    def destroy = {
    }
}
